package org.yelongframework.baidu.aip.ocr.executor;

import java.util.HashMap;

import org.yelongframework.baidu.aip.executor.AipExecutor;
import org.yelongframework.baidu.aip.ocr.result.OcrAipResult;
import org.yelongframework.baidu.aip.ocr.result.OcrAipResultFactory;
import org.yelongframework.lang.Nullable;

import com.baidu.aip.ocr.AipOcr;

/**
 * OCR执行器
 * 
 * @since 1.0.0
 */
public interface OcrAipExecutor extends AipExecutor {

	// ==================================================执行基础通用OCR识别==================================================

	/**
	 * 执行基础通用OCR识别
	 * 
	 * @param image   图片路径
	 * @param options 选择参数
	 * @return OCR结果
	 * @see {@link AipOcr#basicGeneral(String, java.util.HashMap)}
	 */
	OcrAipResult executeBasicGeneral(String image, @Nullable HashMap<String, String> options);

	/**
	 * 执行基础通用OCR识别
	 * 
	 * @param image   图片路径
	 * @param options 选择参数
	 * @return OCR结果
	 * @see {@link AipOcr#basicGeneral(byte[], java.util.HashMap)}
	 */
	OcrAipResult executeBasicGeneral(byte[] image, @Nullable HashMap<String, String> options);

	// ==================================================执行通用OCR识别(含位置)==================================================

	/**
	 * 执行通用OCR识别(含位置)
	 * 
	 * @param image   图片路径
	 * @param options 选择参数
	 * @return OCR结果
	 * @see {@link AipOcr#general(String, java.util.HashMap)}
	 */
	OcrAipResult executeGeneral(String image, @Nullable HashMap<String, String> options);

	/**
	 * 执行通用OCR识别(含位置)
	 * 
	 * @param image   图片路径
	 * @param options 选择参数
	 * @return OCR结果
	 * @see {@link AipOcr#general(byte[], java.util.HashMap)}
	 */
	OcrAipResult executeGeneral(byte[] image, @Nullable HashMap<String, String> options);

	// ==================================================执行高精度通用OCR识别(含位置)==================================================

	/**
	 * 执行高精度通用OCR识别(含位置)
	 * 
	 * @param image   图片路径
	 * @param options 选择参数
	 * @return OCR结果
	 * @see {@link AipOcr#accurateGeneral(String, java.util.HashMap)}
	 */
	OcrAipResult executeAccurateGeneral(String image, @Nullable HashMap<String, String> options);

	/**
	 * 执行高精度通用OCR识别(含位置)
	 * 
	 * @param image   图片路径
	 * @param options 选择参数
	 * @return OCR结果
	 * @see {@link AipOcr#accurateGeneral(byte[], java.util.HashMap)}
	 */
	OcrAipResult executeAccurateGeneral(byte[] image, @Nullable HashMap<String, String> options);

	// ==================================================客户端==================================================

	@Override
	AipOcr getAipClient();

	// ==================================================客户端结果工厂==================================================

	@Override
	OcrAipResultFactory getAipResultFactory();

}
